from py_page.base_page import BasePage
from time import sleep



class GoodsDetailPage(BasePage):

    file_path = BasePage.get_path("/py_yaml/goods_detail_page.yaml")

    # 点击加入购物车
    def click_add_cart(self):
        # 当测试用例中调用该方法后接下来需要通过.继续调用该方法当前类下的其他方法时
        # 从用户交互上：当我们在GoodsDetailPage页面中点击【加入购物车】后实际还是停留在了当前的页面，所以return self，为后续在该页面执行其他操作做准备；
        # self.find_and_click("xpath", "//*[text()='加入购物车']")
        self.run_steps(self.file_path, "click_add_cart")
        return self   # self -> GoodsDetailPage() 该方法在测试用例的链式调用中需要调用当前类对象的其他实例方法时需要return self


    # 获取当前商品的名称
    def get_goods_name(self):
        # 从测试用例维度：因为为了保证链式调用不会中断，在获取商品详情后，还需要调用该类下面的其他方法所以要把获取到的元素对象和self 返回给测试用例保证链式调用不中断
        # 从用户交互维度：在进入商品详情后，测试人员会查看获取该商品的名称，并且在当前页面去点击进入购物操作；
        goods_name = self.run_steps(self.file_path, "get_goods_name").text
        return goods_name, self    # 此处返回的是一个元组（goods_name, self），元组->

    # 进入购物车页面
    def goto_cart_page(self):
        # sleep(2)
        self.run_steps(self.file_path, "goto_cart_page")
        from py_page.shop_car_page import CartPage
        return CartPage(self.driver)

    # 收藏商品
    def click_collect_goods(self):
        self.run_steps(self.file_path, "click_collect_goods")
        return self

    # 进入我们的收藏页面
    def goto_my_collect_page(self):
        # sleep(2)
        self.run_steps(self.file_path, "goto_my_collect_page")
        from py_page.my_collect_page import MyCollectPage
        return MyCollectPage(self.driver)




